package com.bilibili.juc.cas;


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;

import java.util.concurrent.atomic.AtomicReference;



/**
 * 题目：实现一个自旋锁,复习CAS思想
 * 自旋锁好处：循环比较获取没有类似wait的阻塞。
 *
 * 通过CAS操作完成自旋锁，A线程先进来调用myLock方法自己持有锁5秒钟，B随后进来后发现
 * 当前有线程持有锁，所以只能通过自旋等待，直到A释放锁后B随后抢到。

 */

@Getter
@ToString
@AllArgsConstructor
class MyUser
{
    String username ;
    int age;
}
public class AtomicReferenceDemo01 {

    public static void main(String[] args) {
        AtomicReference<MyUser> atomicReference = new AtomicReference<MyUser>();

        MyUser z3 = new MyUser("z33",22);
        MyUser li4 = new MyUser("li4",18);

        atomicReference.set(z3);

        System.out.println(atomicReference.compareAndSet(z3,li4)+"\t"+atomicReference.toString());

    }
}
